package io.geekidea.boot.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hwtx.form.domain.def.ResourceTreeOption;
import io.geekidea.boot.system.entity.SysMenu;
import io.geekidea.boot.system.query.SysMenuQuery;
import io.geekidea.boot.system.vo.SysMenuTreeVo;
import io.geekidea.boot.system.vo.SysMenuVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 系统菜单 Mapper 接口
 *
 * @author geekidea
 * @since 2022-12-26
 */
@Mapper
public interface SysMenuMapper extends BaseMapper<SysMenu> {

    /**
     * 系统菜单详情
     */
    SysMenuVo getSysMenuById(Long id);

    List<SysMenu> getResourceCodeAndIdByUserRole(@Param("userId") Long userId, @Param("types") List<Integer> types);


    List<SysMenu> getResourceCodeAndIdByUserOrgRole(@Param("userId") Long userId, @Param("types") List<Integer> types);


    /**
     * 获取系统菜单树形列表
     */
    List<SysMenuTreeVo> getSysMenus(SysMenuQuery query);

    /**
     * 管理员获取所有导航菜单树形列表
     */
    List<SysMenuTreeVo> getMenusByRoleIds(List<Long> roleIds);


    /**
     * 获取角色权限ID集合
     */
    List<Long> getMenuIdsByRoleId(Long roleId, List<Integer> types);

    /**
     * 根据父菜单ID获取所有的子菜单ID集合
     */
    List<Long> getChildrenMenuIds(@Param("parentIds") List<Long> parentIds);

    List<ResourceTreeOption> getValidResources(SysMenuQuery query);

    List<SysMenu> getAllValidResourcesWithIdAndPId();
}
